package org.example.Stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/** @ClassName: StreamDemo @Author NeySun @Description: TODO @Version 1.0 @Date 2022-03-03 */
public class StreamDemo {

  public static void main(String[] args) {
    //        List<Author> authors = getAuthors();
    //        System.out.println(authors);
    // 打印所有年龄小于18的作家的名字，并且要注意去重
    Boolean globalMatch = Boolean.FALSE;
    String name = "多";
    List<Author> authors = getAuthors();
    authors.stream() // 把集合转换成流
        .distinct() // 先去除重复的作家
        .filter(author -> author.getAge() < 18) // 年龄小于18的作家
        //                .filter(author ->globalMatch ?author.getName().equals(name):
        // author.getName().contains(name)   )//模糊查询
        //                .sorted(Comparator.comparing(Author::getAge))// 按年纪升序 排序
        .sorted(Comparator.comparing(Author::getAge).reversed()) // 按年纪降序 排序
        .forEach(author -> System.out.println(author.getName() + author.getAge())); // 遍历打印名字
  }

  public static List<Author> getAuthors() {
    // 数据初始化
    Author author = new Author(1L, "蒙多s", 38, "一个从菜刀中明悟哲理的祖安人", null);
    Author author2 = new Author(2L, "亚拉索", 15, "狂风也追逐不上他的思考速度", null);
    Author author3 = new Author(3L, null, 14, "是这个世界在限制他的思维", null);
    Author author4 = new Author(3L, "易", 14, "是这个世界在限制他的思维", null);

    // 书籍列表
    List<Book> books1 = new ArrayList<>();
    List<Book> books2 = new ArrayList<>();
    List<Book> books3 = new ArrayList<>();

    books1.add(new Book(1L, "刀的两侧是光明与黑暗", "哲学,爱情", 88, "用一把刀划分了爱恨"));
    books1.add(new Book(2L, "一个人不能死在同一把刀下", "个人成长,爱情", 99, "讲述如何从失败中明悟真理"));

    books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));
    books2.add(new Book(3L, "那风吹不到的地方", "哲学", 85, "带你用思维去领略世界的尽头"));
    books2.add(new Book(4L, "吹或不吹", "爱情,个人传记", 56, "一个哲学家的恋爱观注定很难把他所在的时代理解"));

    books3.add(new Book(5L, "你的剑就是我的剑", "爱情", 56, "无法想象一个武者能对他的伴侣这么的宽容"));
    books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢？"));
    books3.add(new Book(6L, "风与剑", "个人传记", 100, "两个哲学家灵魂和肉体的碰撞会激起怎么样的火花呢？"));
    author.setBooks(books1);
    author2.setBooks(books2);
    author3.setBooks(books3);
    author4.setBooks(books3);
    return new ArrayList<>(Arrays.asList(author, author2, author3, author4));
  }
}
